Processors are at the heart of modern computing systems. Computers of various types typically include one or more processors, each of which may in turn include multiple processing engines, often referred to as cores. Today, processors such as central processing units (CPUs) include one or more cores and often include additional components within a single socket. Such additional components include integrated controllers and chipset functionality, in addition to integrated storage. Such storage can include various cache memories that are at different levels of a memory subsystem hierarchy.
For example, some systems may include a multi-level cache hierarchy, including at least one low level cache that is closely associated with one or more cores, and higher-level caches, which may be shared caches accessed by multiple cores. Different information can be stored in these different cache memories. In addition, additional memory structures such as hardware buffers such as a translation lookaside buffer (TLB) can be present in a processor. In some processors, different cache memories may be present to store instruction information and data information. In addition, different TLB's may similarly store translations for memory pages including instruction information and memory pages including data information. Of course, some processors include cache memories that store both instruction and data information.
In many processors, user applications and an operating system (OS) do not share code, but they share an instruction cache (I-cache) and an instruction translation lookaside buffer (ITLB). Because an incoming instruction fetch to the I-cache or ITLB searches purely on a memory address basis, power consumption is needlessly increased as a user-mode instruction fetch will never hit a cache line that contains kernel-mode code and vice-versa.